home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / fly8111-.000 / fly8111- / fly8 / cockpit.c < prev    next >
C/C++ Source or Header  |  1979-12-31  |  3KB  |  143 lines

  1. /* --------------------------------- cockpit.c ------------------------------ */
  2.  
  3. /* This is part of the flight simulator 'fly8'.
  4.  * Author: Eyal Lebedinsky (eyal@ise.canberra.edu.au).
  5. */
  6.  
  7. /* Render instruments etc.
  8. */
  9.  
  10. #include "plane.h"
  11.  
  12.  
  13. #define    IFG    ST_HFG        /* instruments color */
  14. #define    MFG    ST_HFGI        /* instruments marker color */
  15.  
  16. extern void FAR
  17. show_inst (VIEW *view, OBJECT *obj)
  18. {
  19.     int    orgx, orgy, maxx, maxy, sizex, sizey, sizexx, tx, ty, v, x, y;
  20.     int    spitch, croll, sroll, sdir, cdir;
  21.  
  22.     if (!obj || !IS_PLANE(obj) || !(EE(obj)->hdd & HDD_INSTRUMENTS))
  23.         return;
  24.  
  25. /* Set screen area and adjust aspect ratio.
  26. */
  27.     get_area (view, &orgx, &orgy, &maxx, &maxy);
  28.     get_square (view, maxx, maxy, &sizex, &sizey);
  29.  
  30.     orgx += maxx;                /* lower right corner */
  31.     orgy += maxy;
  32.     sizex /= 8;
  33.     sizey /= 4;
  34.     orgx -= sizex;
  35.     orgy -= sizey;
  36.     tx = sizex/8;
  37.     ty = sizey/8;
  38.  
  39.     gr_color (IFG);
  40.  
  41.     gr_move (orgx + sizex, orgy + sizey);    /* outline */
  42.     gr_draw (orgx + sizex, orgy - sizey);
  43.     gr_draw (orgx - sizex, orgy - sizey);
  44.     gr_draw (orgx - sizex, orgy + sizey);
  45.     gr_draw (orgx + sizex, orgy + sizey);
  46.  
  47.     sizexx = sizex - tx;
  48.     gr_move (orgx - sizex,  orgy);        /* ticks */
  49.     gr_draw (orgx - sizexx, orgy);
  50.     gr_move (orgx + sizex,  orgy);
  51.     gr_draw (orgx + sizexx, orgy);
  52.  
  53.     gr_color (MFG);
  54.  
  55.     v = muldiv (EE(obj)->rudder, sizex, 90);    /* rudder */
  56.     gr_move (orgx + v, orgy + sizey);
  57.     gr_draw (orgx + v, orgy + sizey - ty);
  58.  
  59.     v = muldiv (EE(obj)->throttle, sizey, 100);    /* throttle */
  60.     gr_move (orgx + sizex,  orgy - v);
  61.     gr_draw (orgx + sizexx, orgy - v);
  62.  
  63. #define    VLIMIT    VONE*300
  64.     v = obj->V[Z];                    /* vz */
  65.     if (v > VLIMIT)
  66.         v = VLIMIT;
  67.     if (v < -VLIMIT)
  68.         v = -VLIMIT;
  69.     v = muldiv (v, sizey, VLIMIT);
  70. #undef    VLIMIT
  71.  
  72.     x = orgx - sizex;
  73.     y = orgy - v;
  74.     gr_move (x - tx, y - ty);
  75.     gr_draw (x + tx, y + ty);
  76.     gr_move (x - tx, y + ty);
  77.     gr_draw (x + tx, y - ty);
  78.  
  79.     sroll  = obj->siny;            /* plane */
  80.     croll  = obj->cosy;
  81.     spitch = obj->a[X];
  82.     spitch = fmul (spitch, sizey)>>1;
  83.  
  84.     x = fmul (croll, sizexx);
  85.     y = fmul (sroll, sizey)>>1;
  86.  
  87.     orgy  -= spitch;
  88.  
  89.     gr_color (IFG);
  90.  
  91.     gr_move (orgx - x, orgy - y);
  92.     gr_draw (orgx + x, orgy + y);
  93.  
  94.     x = fmul (sroll, sizexx)/4;
  95.     y = fmul (croll, sizey)/8;
  96.  
  97.     gr_move (orgx,     orgy);
  98.     gr_draw (orgx + x, orgy - y);
  99.     orgy += spitch;
  100.     orgx -= 2*sizex;
  101.  
  102. /* direction
  103. */
  104.     x = sizex;
  105.     y = sizey>>1;
  106.  
  107.     orgy += y;
  108.  
  109.     sdir  = obj->sinz;
  110.     sdir  = fmul (sdir,  sizexx);
  111.     cdir  = obj->cosz;
  112.     cdir  = fmul (cdir,  y);
  113.  
  114.     gr_move (orgx + x, orgy + y);        /* outline */
  115.     gr_draw (orgx - x, orgy + y);
  116.     gr_draw (orgx - x, orgy - y);
  117.     gr_draw (orgx + x, orgy - y);
  118.  
  119.     gr_move (orgx, orgy);
  120.     gr_draw (orgx - sdir, orgy - cdir);    /* hand */
  121.     orgx -= 2*sizex;
  122.  
  123. /* speed
  124. */
  125.  
  126. #define    MAXSPEED    (VONE*600)
  127.     x = obj->speed;
  128.     if (x > MAXSPEED)
  129.         x = MAXSPEED;
  130.     else if (x < 0)
  131.         x = 0;
  132.     x = muldiv (x, 2*sizex, MAXSPEED);
  133.     y = sizey>>1;
  134. #undef MAXSPEED
  135.     gr_move (orgx + sizex, orgy - y);    /* scale */
  136.     gr_draw (orgx - sizex, orgy - y);
  137.     gr_move (orgx,             orgy + y);    /* hand */
  138.     gr_draw (orgx - sizex + x, orgy - y);
  139. }
  140.  
  141. #undef IFG
  142. #undef MFG
  143.